package II;

import java.util.ArrayList;
import java.util.List;
/*
剑指 Offer 57 - II. 和为s的连续正数序列
解题思路：滑动窗口思想（双指针），两个指针分别指向第一个数，右指针移动，但sum小于target时，继续更新sum并且右指针继续移动。
当sum大于target时，左指针向右移动一位并更新sum。当sum等于target时，添加到list中，以数组的形式。
 */
public class Offer57 {
  public static void main(String[] args) {
   new Offer57().findContinuousSequence(9);
  }

  public int[][] findContinuousSequence(int target) {
    int l = 1;
    int r = 1;
    int sum = 0;
    List<int[]> res = new ArrayList<>();
    while (l <= target/2){
      if (sum < target){
        sum = sum + r;
        r++;
      }else if (sum > target){
        sum = sum - l;
        l++;
      }else {
        // 记录结果
        int[] arr = new int[r - l];
        for (int k = l; k < r; k++) {
          arr[k-l] = k;
        }
        res.add(arr);
        // 左边界向右移动
        sum = sum - l;
        l++;
      }
    }
    return res.toArray(new int[res.size()][]);
  }
}
